package com.yanggu.spark.core.rdd.transform.value

import org.apache.spark.{SparkConf, SparkContext}

//groupBy算子
object RDD06_GroupBy {

  def main(args: Array[String]): Unit = {

    //1. 创建SparkConf
    val sparkConf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("mapOperator")

    //2. 创建SparkContext
    val sparkContext = new SparkContext(sparkConf)

    val dataRdd = sparkContext.makeRDD(1 to 6, 2)

    //3. groupBy算子。将数据根据指定的规则进行分组, 分区默认不变，但是数据会被打乱重新组合，我们将这样的操作称之为shuffle。
    //极限情况下，数据可能被分在同一个分区中
    //这样形成元祖或者Map。key是分组的依据, value的List[数据]
    val value = dataRdd.groupBy(_ % 2)

    value.collect().foreach {
      case (i, ints) => println("分组依据: " + i + ", 组内元素: " + ints.mkString(", "))
    }
    //释放资源
    sparkContext.stop()
  }

}
